import java.util.Scanner;

public class Main {
    //创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3
    // 要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算

    //    public static int max2(int a, int b){
//        if(a > b){
//            return a;
//        }
//        return b;
//    }
//
//    public static int max3(int a, int b, int d){
//        int m = max2(a, b);
//        int n = max2(m, d);
//        return n;
//    }
//    public static void main(String[] args) {
//        int a = 0;
//        int b = 0;
//        Scanner scan = new Scanner(System.in);
//        System.out.println("请输入一个整数:>");
//        a = scan.nextInt();
//        System.out.println("请再输入一个整数:>");
//        b = scan.nextInt();
//        int d = 0;
//        System.out.println("请再输入一个整数:>");
//        d = scan.nextInt();
//        int c = max3(a,b,d);
//        System.out.println("较大的数是"+c);
//
//    }

//    求N的阶乘 & 求1！+2！+3！+4！+........+n!的和
//    public static int fac(int n) {
//        int sum1 = 1;
//        for (int i = 1; i <= n; i++) {
//            sum1 *= i;
//        }
//        return sum1;
//    }


//    public static void main1(String[] args) {
//        int n = 0;
//        Scanner scan = new Scanner(System.in);
//        n = scan.nextInt();
//        int sum = 0;
//        for (int i = 1; i <= n ; i++) {
//            sum += fac(i);
//        }
//        System.out.println(sum);
//    }


//    迭代实现求斐波那契数列的第n项。
//    public static void main2(String[] args) {
//        int n = 0;
//        Scanner scan = new Scanner(System.in);
//        n = scan.nextInt();
//        int f1 = 1;
//        int f2 = 1;
//        int f3 = 0;
//        for (int i = 1; i <= n ; i++) {
//            f3 = f1 + f2;
//            f1 = f2;
//            f2 = f3;
//        }
//        System.out.println(f3);
//    }

    //在同一个类中,分别定义求两个整数的方法和三个小数之和的方法。
//    public static int add(int a ,int b){
//        int sum = a + b;
//        return sum;
//    }
//
//    public static double add(double m, double n){
//        double sum = m + n;
//        return sum;
//    }
//    public static void main3(String[] args) {
//        int a = 0;
//        int b = 0;
//        Scanner scan = new Scanner(System.in);
//        a = scan.nextInt();
//        b = scan.nextInt();
//        int c = add(a, b);
//        System.out.println(c);
//
//        double m = 0;
//        double n = 0;
//        m = scan.nextDouble();
//        n = scan.nextDouble();
//        double j = add(m, n);
//        System.out.println(j);
//    }


    //递归实现n的阶乘
//    public static int fac(int n){
//        if(n == 1){
//            return 1;
//        }
//        int m = n * fac(n - 1);
//        return m;
//    }
//    public static void main(String[] args) {
//        int n = 0;
//        Scanner scan = new Scanner(System.in);
//        n = scan.nextInt();
//        int res = fac(n);
//        System.out.println(res);
//    }


        //使用递归法求解含有n个不同大小盘子的汉诺塔移动路径，参数n为盘子数，把A塔上盘子全部移动到C塔上，B为过渡塔
        public static void recursionHanoi(int n,char A,char B,char C){
            if(n == 1){
                System.out.print(A+"——>"+C+"\n");
            }
            else{
                recursionHanoi(n-1,A,C,B);         //使用递归先把A塔最上面的n-1个盘子移动到B塔上，C为过渡塔
                System.out.print(A+"——>"+C+"\n");       //把A塔中底下最大的圆盘，移动到C塔上
                recursionHanoi(n-1,B,A,C);         //使用递归把B塔上n-1个盘子移动到C塔上，A为过渡塔
            }
        }

        public static void main(String[] args){
            System.out.println("请输入盘子总数n:");
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            recursionHanoi(n,'A','B','C');
        }

}
